%{
   #include <iostream>
   #include <string>
   #include "../datosEntrada/DatosEntrada.h"
   enum yytokentype {
      IP_SERVIDOR  = 256,
      IP_CLIENTE = 257,
      PUERTO  = 258,      
      ARCHIVO = 259,
      AYUDA=260,
      INICIAR_DESCARGA=261,
      ERROR=262,
      INTERFACE = 263
   };
	
	
%}

obviar         [ \t\n]+
 

%%

{obviar}     					     				{}
"ip_servidor "[1-9]{1}[0-9]{0,2}.[1-9]{1}[0-9]{0,2}.[1-9]{1,3}.[0-9]{1,3}  	{ return IP_SERVIDOR;}
"ip_cliente "[1-9]{1}[0-9]{0,2}.[1-9]{1}[0-9]{0,2}.[1-9]{1,3}.[0-9]{1,3}   	{ return IP_CLIENTE;}
"puerto "[0-9]{1,4}								{ return PUERTO;}
"archivo "[1-9a-zA-Z_]+"."[1-9a-zA-Z]+						{return ARCHIVO;}
"interfaz "[a-zA-Z]+[0-9]					{return INTERFACE;}
"ayuda"										{return AYUDA;}
"iniciar_descarga"								{return INICIAR_DESCARGA;}

.										{return ERROR;}
%%

int main(){
	int tok,tok1;
	string aux;
	cout<<">> ";
	while(tok=yylex()){
		cout<<"\r>> ";
		if(tok==IP_SERVIDOR){
			aux=yytext;
			DatosEntrada::InstanceDatosEntrada()->setIpServidor(aux.substr(aux.find_first_of(' ')+1,aux.size()));

		}
		else if(tok==IP_CLIENTE){
			aux=yytext;
			DatosEntrada::InstanceDatosEntrada()->setIpCliente(aux.substr(aux.find_first_of(' ')+1,aux.size()));

		}
		else if(tok==PUERTO){
			aux=yytext;
			DatosEntrada::InstanceDatosEntrada()->setPuerto(aux.substr(aux.find_first_of(' ')+1,aux.size()));


		}
		else if(tok==ARCHIVO){
			aux=yytext;
			DatosEntrada::InstanceDatosEntrada()->setArchivo(aux.substr(aux.find_first_of(' ')+1,aux.size()));

		}
		else if(tok==AYUDA){
			system("cat interpreteComando/Ayuda");
			cout<<endl;
		}
		else if(tok==INTERFACE){
			aux=yytext;
			DatosEntrada::InstanceDatosEntrada()->setInterface(aux.substr(aux.find_first_of(' ')+1,aux.size()));
			
		}
		else if(tok==INICIAR_DESCARGA){
			if(DatosEntrada::InstanceDatosEntrada()->getIpServidor().empty()){
				cout<<"ERROR:Especifique ip_servidor Consulte ayuda con el comando <ayuda>"<<endl;
			}
			else if(DatosEntrada::InstanceDatosEntrada()->getIpCliente().empty()){
				cout<<"ERROR:Especifique ip_cliente Consulte ayuda con el comando <ayuda>"<<endl;			
			}
			else if(DatosEntrada::InstanceDatosEntrada()->getArchivo().empty()){
				cout<<"ERROR:Especifique nombre archivo a descargar Consulte ayuda con el comando <ayuda>"<<endl;
			}
			else {	
				DatosEntrada::InstanceDatosEntrada()->salvar("datosEntrada.dat");
				return 1;				
			} 

		}
		else{
			cout<<"ERROR: Comando Invalido Conulte ayuda con el comando <ayuda>";
		}

	}
}
